home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / COMMDLG.PAK / COMMDLGX.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  6KB  |  215 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // Copyright (c) 1993, 1995 by Borland International, All Rights Reserved
  4. //
  5. //   This program has example code that uses the Common Dialog classes
  6. //   in OWL
  7. //
  8. //   The main window will have menu selections for opening a file, changing
  9. //   the font and changing the color used for the selected font.  When a file
  10. //   is selected the name will be displayed on the client area of the window.
  11. //
  12. //----------------------------------------------------------------------------
  13. #include <owl/pch.h>
  14. #include <owl/applicat.h>
  15. #include <owl/framewin.h>
  16. #include <owl/dialog.h>
  17. #include <owl/dc.h>
  18. #include <owl/chooseco.h>
  19. #include <owl/choosefo.h>
  20. #include <owl/opensave.h>
  21. #include <stdio.h>
  22. #include <string.h>
  23. #include "commdlgx.rh"
  24.  
  25.  
  26. //
  27. // class TCommDlgWnd
  28. // ~~~~~ ~~~~~~~~~~~
  29. class TCommDlgWnd : public TFrameWindow {
  30.   public:
  31.     TCommDlgWnd(TWindow*, const char*);
  32.    ~TCommDlgWnd();
  33.  
  34.     void       Paint(TDC&, bool, TRect&);
  35.     void       CmFileOpen();
  36.     void       CmColor();
  37.     void       CmFont();
  38.     void       CmHelpAbout();
  39.  
  40.     TColor     Color;
  41.     TFont*     Font;
  42.  
  43.     TOpenSaveDialog::TData   FilenameData;
  44.     TChooseFontDialog::TData FontData;
  45.  
  46.     void EvSize(uint sizeType, TSize& size);
  47.  
  48.   DECLARE_RESPONSE_TABLE(TCommDlgWnd);
  49. };
  50.  
  51. DEFINE_RESPONSE_TABLE1(TCommDlgWnd, TFrameWindow)
  52.   EV_WM_SIZE,
  53.   EV_COMMAND(CM_FILEOPEN, CmFileOpen),
  54.   EV_COMMAND(CM_COLOR, CmColor),
  55.   EV_COMMAND(CM_FONT, CmFont),
  56.   EV_COMMAND(CM_HELPABOUT, CmHelpAbout),
  57. END_RESPONSE_TABLE;
  58.  
  59.  
  60. //
  61. // Note the initialization method of the filter string. The TOpenSave::TData
  62. // class expects to find a filter string that has a '|' terminator between
  63. // strings and an extra '|' that terminates the entire filter data set.
  64. // The '|' characters are translated to 0's within TData's copy of the string.
  65. // Using '|'s allows the filter to be loaded from a resource & copied using
  66. // strcpy.
  67. //
  68. TCommDlgWnd::TCommDlgWnd(TWindow* parent, const char* title)
  69. :
  70.   TFrameWindow(parent, title),
  71.   FilenameData(OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST,
  72.                "All Files (*.*)|*.*|Text Files (*.txt)|*.txt|",
  73.                0, "", "*")
  74. {
  75.   AssignMenu("CMDLGAPMENU");      // Set up the menu
  76.   Color = TColor::Black;          // Use black as the default color
  77.   Font = 0;                       // Empty the handle to the font
  78.  
  79.   // Take advantage of each OS' enhancements to the FileOpen Dialog
  80.   //
  81. #if defined(BI_PLAT_WIN32)
  82.   if (TSystem::IsNT() || TSystem::IsWin95())
  83.     FilenameData.Flags |= OFN_LONGNAMES;
  84.  
  85.   if (TSystem::IsWin95())
  86.     FilenameData.Flags |= OFN_EXPLORER;
  87. #endif
  88. }
  89.  
  90. TCommDlgWnd::~TCommDlgWnd()
  91. {
  92.   delete Font;
  93. }
  94. //
  95. // We need to invalidate the entire area, not just the clip area so that
  96. // paint gets called correctly
  97. //
  98. void
  99. TCommDlgWnd::EvSize(uint sizeType, TSize& size)
  100. {
  101.   Invalidate();
  102.   TFrameWindow::EvSize(sizeType,size);
  103. }
  104.  
  105. //
  106. // Display the file name using the selected font in the selected color.
  107. //
  108. void
  109. TCommDlgWnd::Paint(TDC& paintDC, bool, TRect&)
  110. {
  111.   paintDC.SetTextColor(Color);
  112.   paintDC.SetBkColor(TColor::SysWindow);
  113.   if (Font)
  114.     paintDC.SelectObject(*Font);
  115.   paintDC.DrawText(FilenameData.FileName, strlen(FilenameData.FileName),
  116.                    GetClientRect(), DT_CENTER | DT_WORDBREAK);
  117. }
  118.  
  119. //
  120. //
  121. //
  122. void
  123. TCommDlgWnd::CmFileOpen()
  124. {
  125.   // If the call to Execute fails you can examine the Error member
  126.   // of FilenameData to determine the type of error that occured.
  127.   //
  128.   if (TFileOpenDialog(this, FilenameData).Execute() != IDOK) {
  129.     if (FilenameData.Error != 0) {   // 0 value means user selected Cancel
  130.       char  msg[50];
  131.       sprintf(msg, "GetOpenFileName returned Error #%ld", FilenameData.Error);
  132.       MessageBox(msg, "WARNING", MB_OK|MB_ICONSTOP);
  133.     }
  134.   }
  135.   Invalidate();         // Repaint to display the new name
  136. }
  137.  
  138. //
  139. //
  140. void
  141. TCommDlgWnd::CmColor()
  142. {
  143.   TChooseColorDialog::TData choose;
  144.   static TColor    custColors[16] = {
  145.     0x010101L, 0x101010L, 0x202020L, 0x303030L,
  146.     0x404040L, 0x505050L, 0x606060L, 0x707070L,
  147.     0x808080L, 0x909090L, 0xA0A0A0L, 0xB0B0B0L,
  148.     0xC0C0C0L, 0xD0D0D0L, 0xE0E0E0L, 0xF0F0F0L
  149.   };
  150.  
  151.   choose.Flags = CC_RGBINIT;
  152.   choose.Color = Color;
  153.   choose.CustColors = custColors;
  154.   if (TChooseColorDialog(this, choose).Execute() == IDOK) {
  155.     Color = choose.Color;
  156.   }
  157.   Invalidate();
  158. }
  159.  
  160. //
  161. //
  162. //
  163. void
  164. TCommDlgWnd::CmFont()
  165. {
  166.   if (Font) {                    // FontData contains previous selections
  167.     FontData.Flags |= CF_INITTOLOGFONTSTRUCT;
  168.     FontData.Color = Color;
  169.   }
  170.   else {
  171.     FontData.DC = 0;
  172.     FontData.Flags = CF_EFFECTS | CF_FORCEFONTEXIST | CF_SCREENFONTS;
  173.     FontData.Color = Color;      // Color and font dialogs use the same color
  174.     FontData.Style = 0;
  175.     FontData.FontType = SCREEN_FONTTYPE;
  176.     FontData.SizeMin = 0;
  177.     FontData.SizeMax = 0;
  178.   }
  179.   if (TChooseFontDialog(this, FontData).Execute() == IDOK) {
  180.     delete Font;
  181.     Color = FontData.Color;
  182.     Font = new TFont(&FontData.LogFont);
  183.   }
  184.   Invalidate();
  185. }
  186.  
  187. void
  188. TCommDlgWnd::CmHelpAbout()
  189. {
  190.   MessageBox("Common Dialog Example\nWritten using ObjectWindows\n"
  191.              "Copyright (c) 1993, 1995 Borland",
  192.              "About Common Dialog Example",
  193.              MB_OK);
  194. }
  195.  
  196.  
  197. //
  198. // class TCommDlgApp
  199. // ~~~~~ ~~~~~~~~~~~
  200. class TCommDlgApp : public TApplication {
  201.   public:
  202.     TCommDlgApp() : TApplication() {}
  203.  
  204.     void InitMainWindow() {
  205.       MainWindow = new TCommDlgWnd(0, "Common Dialog Example");
  206.       EnableCtl3d();
  207.     }
  208. };
  209.  
  210. int
  211. OwlMain(int /*argc*/, char* /*argv*/ [])
  212. {
  213.   return TCommDlgApp().Run();
  214. }
  215.